package com.yanggu.spark.core.rdd.transform.value

import org.apache.spark.{SparkConf, SparkContext}

//distinct去重算子
object RDD08_Distinct {

  def main(args: Array[String]): Unit = {
    //1. 创建SparkConf
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("mapOperator")

    //2. 创建SparkContext
    val sparkContext = new SparkContext(sparkConf)

    //3. 从内存中创建RDD
    val dataRdd = sparkContext.makeRDD(List[Int](1, 2, 3, 3 ,4, 5, 6), 2)

    //4. 去重
    val value = dataRdd.distinct()
    //查看源码后发现其中一种去重的方法。基本使用reduceByKey进行去重。另外一种没太看懂
    //基本思路转成k-v, 按照key进行规约, 这里只取key, 然后进行map, 这里只取tuple的第一个
    val value1 = dataRdd.map((_, null)).reduceByKey((x, _) => x).map(_._1)
    println(value1.collect().mkString(", "))

    //5. 打印
    println(value.collect().mkString(", "))

    //6. 释放资源
    sparkContext.stop()
  }

}
